home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d27
/
dsapb45.arc
/
PARSPATH.C
< prev
Wrap
Text File
|
1990-04-07
|
3KB
|
111 lines
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include <string.h>
#include <ctype.h>
void parspath(char * path)
{ /* this function converts a pathname */
/* into a full pathname */
/* it uses the string you pass it */
char drive[MAXDRIVE]; /* used for splitting path */
char dir[MAXDIR];
char fname[MAXFILE];
char ext[MAXEXT];
char curpath[MAXPATH]; /* used to re-merge path */
char pathtemp[80]="\0",dirtemp[80]="\0"; /* used as temporary strings */
char tempstr[80];
register int a;
fnsplit(path,drive,dir,fname,ext); /* split path */
if ( (ext[0] == '\0') && (fname[0]!='\0') &&
( (dir[(strlen(dir)-1)]=='\\') || (strlen(dir) == 0) ) )
{ /* no extension & either */
/* no directory or dir ends with \ */
/* filename is PROBABLY a directory name */
strcat(dir,fname);
fname[0] = '\0';
}
a=getdisk();
if (drive[0] == '\0')
{ /* if no drive specified, use current drive */
drive[0]=a+'A';
drive[1]=':';
drive[2] = '\0';
}
drive[0]=toupper(drive[0]);
if (dir[0] == '\0')
{ /* if no directory, use current directory on that drive */
getcurdir((drive[0]-'A'+1),curpath);
strcpy(dirtemp,curpath);
}
else
{ /* if directory, parse dir. */
register char * x,* y;
getcurdir((drive[0]-'A'+1),curpath);
y = dir;
x = y;
if (y[0]!='\\') strcpy(dirtemp,curpath);/* not root; use current */
while (*y)
{
x=strchr(y,'\\'); /* use part before 1st \ */
if (x==NULL) x=y+strlen(y); /* no \. use remainder */
strncpy(tempstr,y,(size_t)(x-y)); /* copy to temp string */
tempstr[(x-y)]='\0'; /* teminate with null */
if (dirtemp[0] == '\0')
{ /* no working directory */
if (strcmp(tempstr,".")==0)
{ /* current directory */
strcpy(dirtemp,curpath);
}
else if (strcmp(tempstr,"..")==0)
{ /* parent of current directory */
register char * z;
strcpy(dirtemp,curpath); /* get current dir */
z=strrchr(dirtemp,'\\'); /* remove last \ */
if (z != NULL )
*z='\0'; /* done */
}
else
{ /* use root directory specified */
strcpy(dirtemp,tempstr);
}
}
else
{ /* modify working directory */
if (strcmp(tempstr,".")==0)
{
; /* do nothing - already in current directory */
}
else if (strcmp(tempstr,"..")==0)
{ /* remove last directory in working dir */
register char * z;
z=strrchr(dirtemp,'\\'); /* find last directory */
if ( z!= NULL)
*z='\0'; /* remove it */
}
else
{ /* add directory to working */
strcat(dirtemp,"\\");
strcat(dirtemp,tempstr);
}
}
y=(x+1); /* move past \ */
if ((*x)=='\0') y=x; /* end if at end of string */
}
}
if (fname[0] == '\0')
{ /* no filename - use * */
strcpy(fname,"*");
}
if (ext[0] == '\0')
{ /* no extension - use .* */
strcpy(ext,".*");
}
strcpy(dir,"\\"); /* place \ at beginning of dir */
strcat(dir,dirtemp); /* copy working dir to dir */
fnmerge(pathtemp,drive,dir,fname,ext); /* re-merge pathname */
strcpy(path,pathtemp); /* move it to string passed in */
}